const arr = [3, 2, [1, 3, [1, 2, 3, 5, [5, 4], 3, 6, 5], 4, 7], 3];

// 基本实现
function flat(array) {
  let result = [];
  for (let i of array) {
    if (Array.isArray(i)) {
      result = result.concat(i);
    } else {
      result.push(i);
    }
  }
  return result;
}

// reduce
function flat(array) {
  return array.reduce((arr, i) => {
    if (Array.isArray(i)) {
      return arr.concat(flat(i));
    } else {
      arr.push(i);
      return arr;
    }
  }, []);
}

// reduce 指定深度
function flat(array, deep = 0) {
  return array.reduce((arr, i) => {
    if (Array.isArray(i) && deep > 0) {
      return arr.concat(flat(i), deep - 1);
    } else {
      arr.push(i);
      return arr;
    }
  }, []);
}

console.log(flat(arr, 1));
